#include "cirular_link.h"
#include <stdio.h>

#define LEN ((int)(sizeof(story) / sizeof(char *)))

void visit(void *data) { printf("%s\n", (char *)data); }

static char *story[] = {
    "从前有座山,",
    "山里有座庙,",
    "庙里有个老和尚在给小和尚讲故事,",
    "讲的什么故事呢？",
};

int main() {
  clink link = link_create();
  char *str1 = "庙里有个老和尚在给小和尚讲故事,";
  char *str2 = "从前有座山,";
  char *str3 = "讲的什么故事呢？";
  char *str4 = "山里有座庙,";

  for (int i = 0; i < 2 * LEN; i++)
    add_to_link(link, story[i % LEN]);

  link_transver(link, visit);
  printf("\n1111111111111111111111\n");

  // 验证删除中间元素
  while (search_link(link, str1))
    delete_from_link(link, str1);

  link_transver(link, visit);
  printf("\n2222222222222222222222\n");

  // 验证删除头
  while (search_link(link, str2))
    delete_from_link(link, str2);

  link_transver(link, visit);
  printf("\n333333333333333333333\n");

  // 验证删除尾
  while (search_link(link, str3))
    delete_from_link(link, str3);

  link_transver(link, visit);
  printf("\n4444444444444444444444\n");

  // 验证删除头和唯一元素
  while (search_link(link, str4))
    delete_from_link(link, str4);

  link_transver(link, visit);
  printf("\n555555555555555555555\n");

  for (int i = 0; i < LEN; i++)
    add_to_link(link, story[i % LEN]);

  // 验证删除不存在的元素
  delete_from_link(link, "我是一个不存在的字符串");
  link_transver(link, visit);
  printf("\n");

  link_destory(link);
  return 0;
}
